package ar.edu.untref.robotica.simulador;

import java.util.List;
import java.util.Timer;
import java.util.TimerTask;

public class Animador extends TimerTask {

	private Timer timer;
	private Escenario escenario;
	private Graficador graficador;
	private List<Posicion> animacion;
	private int fps = 120;
	private double period;
	private boolean play;
	private int actual;

	public Animador(Escenario escenario, Graficador graficador) {

		this.escenario = escenario;
		this.graficador = graficador;
		this.timer = new Timer();
		this.period = (double) 1 / this.fps * 1000;
		this.timer.scheduleAtFixedRate(this, 0, (long) period);
	}

	public void play() {

		play = true;
	}

	public void pause() {

		play = false;
	}

	public void stop() {

		play = false;
		actual = 0;
		if (this.animacion.size() > 0) {
			this.escenario.setPosicionRobot(animacion.get(actual).clone());
			this.graficador.repaint();
		}
	}

	public void next() {

		play = false;
		if (actual < animacion.size() - 1) {
			actual++;
			this.escenario.setPosicionRobot(animacion.get(actual).clone());
			this.graficador.repaint();
		}
	}

	public void prev() {

		play = false;
		if (actual > 0) {
			actual--;
			this.escenario.setPosicionRobot(animacion.get(actual).clone());
			this.graficador.repaint();
		}
	}

	public void setAnimacion(List<Posicion> animacion) {

		this.animacion = animacion;
	}

	@Override
	public void run() {

		if (play && !this.graficador.modoSimulacion()) {
			if (actual < animacion.size() - 1) {
				actual++;
				this.escenario.setPosicionRobot(animacion.get(actual).clone());
				this.graficador.repaint();
			}
		}
	}
}
